package frame;

import java.util.Vector;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;


public abstract class  CommonPanel extends JPanel {

	//表示将显示数据的 Swing 组件。
	private JTable table;
	
	//用于存储表数据的向量 （） 的向量。
	protected Vector<Vector> datas;
	
	public void setJTable(JTable table) {
		this.table = table;
	}
	
	public JTable getJTable() {
		return this.table;
	}
	
	public Vector<Vector> getDatas() {
		return datas;
	}

	public void setDatas(Vector<Vector> datas) {
		this.datas = datas;
	}

	//使用提供的向量和列信息初始化表中的数据
	public void initData() {
		if (this.table == null) return; 
		DefaultTableModel tableModel = (DefaultTableModel)this.table.getModel();
		//设置表模型的数据向量和列信息
		tableModel.setDataVector(getDatas(), getColumns());
		//设置表格的外
		setTableFace();
	}
	
	//通过重新初始化数据并重新绘制表来刷新表。
	public void refreshTable() {
		initData();//1.初始化或更新表中的数据。

		getJTable().repaint();//2.重新绘制表格以反映更改。
	}


	//子类为提供表的列名而必须实现的抽象方法。
	public abstract Vector<String> getColumns();
	
	//子类为设置表的外观而必须实现的抽象方法。
	public abstract void setTableFace();
	
	//子类为设置特定于视图的数据而必须实现的抽象方法。
	public abstract void setViewDatas();

	//子类为清除表中的数据而必须实现的抽象方法。
	public abstract void clear();
	
	//返回用于布局目的的水平间距。
	public Box getSplitBox() {
		Box box = new Box(BoxLayout.X_AXIS);
		box.add(new JLabel("             "));
		return box;
	}
	
	//从表中检索所选行的“id”值。假定表中有一个名为“id”的列。
	public String getSelectId(JTable table) {
		int row = table.getSelectedRow();
		int column = table.getColumn("id").getModelIndex();
		String id = (String)table.getValueAt(row, column);
		return id;
	}
	
	
	//显示警告消息对话框并返回用户的响应。
	protected int showWarn(String message) {
		return JOptionPane.showConfirmDialog(this, message, " 格式错误",
				JOptionPane.OK_CANCEL_OPTION);
	}
}
